/*
* Copyright © Shanghai Awinic Technology Co., Ltd. 2020-2020. All rights reserved.
* Description: CRC driver related library function files.
* Date： 20201126
* Awinic_Version： aw_soc_driver_v1.0.0
*/
#include "compile_option.h"
#ifdef AW_86802

#include "aw8680x_global.h"

/**
  * @brief  CRC initialization function
  * @param  None
  * @retval None
  */
void crc_init(void)
{
	crc_clk_init();
}

/**
  * @brief  Set the mode of CRC function
  * @param  None
  * @retval None
  */
static void crc_set_mode(void)
{
	CRC->INIT = CRC_INIT_NUM;
	CRC->CR = CRC_CR_WORD;
	CRC->CR |= CRC_CR_LOAD_EN;
}

/**
  * @brief  CRC loading function
  * @param  AW_U32 crc_len ：buf length, AW_U32 *p_crc_buf: buff addr
  * @retval RET_STATUS_E status
  */
RET_STATUS_E crc_set_buf(AW_U32 crc_len, AW_U32 *p_crc_buf)
{
	AW_U32 i = 0;

	/* Check the the crc_buff allocation */
	if (p_crc_buf == AW_NULL) {
		return RET_ERROR;
	}

	crc_set_mode();
	for (i = 0; i < crc_len; i++) {
		CRC->DR = p_crc_buf[i];
	}

	return RET_OK;
}

/**
  * @brief  CRC result return function
  * @param  None
  * @retval AW_U32 crc_num: crc result data
  */
AW_U32 crc_get_num(void)
{
	AW_U32 crc_num = 0;

	crc_num = CRC->RSLT;

	return crc_num;
}
#endif